<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<script>
			// 浅拷贝
			// 只拷贝一层,更深层次对象级别的只拷贝引用
			var obj = {
				id: 'a',
				name: 'vue',
				msg: {
					age: 3
				}
			};
			var o = {};
			// for(var k in obj){
			// //k是属性名,obj[k]是属性值
			// 	o[k] = obj[k];
			// }	
			Object.assign(o, obj);
			console.log(o);
			// 只拷贝地址,o里面的内容发生改变,obj也跟着改变	
			o.msg.age = 0;
			console.log(obj);
			
			// 深拷贝	
			// 每一层级别的数据都会被拷贝
			var obj2 = {
				id: 11,
				name: 'js',
				msg: {
					age: 33
				}
			};
			var m = {};
			// 封装函数
			function deepCopy(newobj, oldobj) {
				for (var k in oldobj) {
					// 判断值属于那种数据类型
					// 1.获取属性值,oldobj[k]
					var item = oldobj[k];
					// 2.判断这个值是否是数组
					if (item instanceof Array) {
						newobj[k] = [];
						deepCopy(newobj[k], item);
						// 3.判断这个值是否是对象
					} else if (item instanceof Object) {
						newobj[k] = {};
						deepCopy(newobj[k], item);
						// 4.属于简单数据类型
					} else {
						newobj[k] = item;
					}
				}
			}
			deepCopy(o, obj2);
			console.log(o);
			o.msg.age = 100;
			console.log(obj2);
		</script>
	</body>
</html>
